#!/usr/bin/python
#
# gkclear - clear system state for Gatekeeper recording sessions
#
# This removes DetachedSignatures, resets SystemPolicy, and removes existing gke files.
#
import sys
import os
import signal
import errno
import subprocess
import shutil


#
# Usage and fail
#
def usage():
	print >>sys.stderr, "Usage: %s" % sys.argv[0]
	sys.exit(2)

def fail(whatever):
	print >>sys.stderr, "%s: %s" % (sys.argv[0], whatever)
	sys.exit(1)


#
# Argument processing
#
if len(sys.argv) != 1:
	usage()


#
# Places and things
#
db = "/var/db/"
detachedsignatures = db + "DetachedSignatures"
gkeauth = db + "gke.auth"
gkesigs = db + "gke.sigs"
policydb = db + "SystemPolicy"
policydb_default = db + ".SystemPolicy-default"


# must be root
if os.getuid() != 0:
	fail("Must have root privileges")


#
# Make sure Gatekeeper is disabled
#
subprocess.check_call(["/usr/sbin/spctl", "--master-disable"])


#
# Clear detached signatures database
#
for file in [detachedsignatures, gkeauth, gkesigs]:
	try:
		os.remove(file)
	except OSError, e:
		if e[0] != errno.ENOENT:
			raise


#
# Reset system policy to default values
#
shutil.copyfile(policydb_default, policydb)


#
# Kill any extant syspolicyd to flush state
#
null = open("/dev/null", "w")
subprocess.call(["/usr/bin/killall", "syspolicyd"], stderr=null)


#
# Done
#
print "System state has been reset."
sys.exit(0)
